"""
异常处理  说白了就是对可能出现的 bug的提前预处理

try:
    可能发生的错误代码
except:
    如果出现异常执行的代码
"""

# 尝试以r模式打开文件,如果文件不存在则以W方式打开
try:
    文件对象 = open("d:/示例异常文件.txt", "r", encoding="utf-8")
except:
    print("出现异常了,因为文件不存在.我将模式改为W模式打开")
    文件对象 = open("d:/示例异常文件.txt", "w", encoding="utf-8")

print("-----------------1-----------------------")
"""
指定特定异常的捕获 

try:
    可能发生的错误代码
except 异常类型 as 别名     //可以将错误类型看成是一个参数 
    如果出现异常,执行的代码

编程里将错误,定义成许多的错误类型 
这里我们是指定了一个特定的错误类型,如果碰见这个指定的类型错误类型,就执行下面的代码 如果不是这个指定的错误类型那么就不执行了就报错 
"""
try:
    print(变量)  # 这里这个变量没有被定义,看右上角也出现了语法错误提示
   # 1 / 0     #  这里的错误类型和上面这个错误类型不一样所以说会报错,可以试一试
except NameError as 异常信息:  # 这个"信息"就是个变量 用来存储错误信息
    print("出现了变量未定义的异常 ")
    print(异常信息)

print("-----------------2-----------------------")
'''
捕获多个异常 

上面的代码例子错误类型是一个，我们可以指定多个错误类型组合成一个元组作为参数使用
'''
try:
    1 / 0     #  这里的错误类型和上面这个错误类型
    print(变量)  # 这里这个变量没有被定义,看右上角也出现了语法错误提示
except (NameError, ZeroDivisionError) as 信息:  # 定义了2个异常错误 出现这2个异常错误可以执行下面的代码
    print("出现了变量未定义的异常,或者除以0的异常错误  ")
    print(信息)

print("-----------------3-----------------------")
"""
捕获所有异常 

最上面其实就是可以做到所有异常都执行，这里还有一个单独的语法捕获所有异常 
Exception 是最顶级的异常类型，可以捕获全部异常 
"""
try:
    1 / 0
    print(变量)
    f = open("d:/yyyy.txt", "r", encoding="utf-8")
    # 定义多个错误语句 然后这些语句都可以被捕获 ,执行下面的代码
except Exception as 异常信息:
    print("出现异常  ")
    print(异常信息)

print("-----------------4-----------------------")

"""
异常 else
else 表示如果没有异常执行的代码 

try:
    可能发生的错误代码
except 异常类型 as 别名:    //可以将错误类型看成是一个参数 
    如果出现异常,执行的代码
else:
    没有异常时执行的代码 
"""
try:
    print("第一行没有异常 ")
except Exception :
    print("有异常执行的代码 ")
else:
    print("我是else,没有异常时执行的代码 ")

print("-----------------4-----------------------")
"""
finally表示 无论是否异常都要执行的代码 
"""
try:
    print(力量)  # 一个没有被定义的变量
except Exception :
    print("有异常执行的代码 ")
else:
    print("我是else,没有异常时执行的代码 ")
finally:
    print("我是finally,无论是否出现异常我都要执行 ")







